Devoir 4 - SEG-2501 - Hiver 2005

Dû: le 11 avril à 12:00 (midi) (donné: le 26 mars)  (le travail peut être fait en groupes de deux personnes)

Devoir 4 :  La concurrence : Une simulation en Java

Figure 1: Cheminement de production dans une usine

Énoncé du problème

Note: Ce devoir est adapté du livre de Thomas J. Schriber, An Introduction to Simulation Using GPSS/H, John Wiley and Sons, 1991, pp. 280-282.

Dans une usine, il y a cinq groupes de machines. Chaque groupe contient un certain nombre de machines d'un type particulier, comme indiqué dans la table 1. Par exemple, le groupe 1 contient 3 machines d'un certain type. Toutes les machines dans un groupe sont identiques. Il n'est pas important quelle machine, dans un groupe donné, est utilisé pour exécuter une étape de travail pour une tâche de production.

Table 1: Nombre de machines dans les différents groupes de machines

Numéro du groupe

nombre de machines dans le groupe

1

3

2

2

3

4

4

3

5

1

L'usine produit trois types de produits. La production d'un produit s'appelle aussi une tâche ("job"). Il y a donc trois types de tâches: type 1, type 2 et type 3. Chaque tâche nécessite un certain nombre d'étapes de travail dans un certain ordre sur des machines de types particuliers. Ceci est montré dans la table 2. Par exemple, les tâches de type 1 doivent visiter 4 groupes de machines dans l'ordre suivant: Groupe 3, groupe 1, groupe 2, et finalement groupe 5.

Table 2: Séquence des étapes de travail et machines visitées pour les trois types de tâches

Type de tâche

nombre de machines à visiter

séquence des visites

temps d'exécution estimé de l'étape de travail  (en heures)

1

4

3

0.50±0.10

1

0.60±0.10

2

0.85±0.10

5

0.5±0.10

2

3

4

1.10±0.2

1

0.80±0.2

3

0.5±0.2

3

5

2

1.20±0.15

5

0.25±0.15

1

0.70±0.15

4

0.90±0.15

3

1.00±0.15

La figure 1 montre une schéma de l'usine. Chaque groupe de machines est représenté par un rectangle, où le nombre de machines dans le groupe est indiqué en parenthèses. Les chemins de parcours des différents types de tâches sont montrés par des flèches.

Table 2 donne aussi le temps d'exécution attendu pour les différents étapes de travail des différents types de tâches. C'est le temps qu'une machine sera occupée pour exécuter cette étape. On suppose que le temps d'exécution suit une distribution uniforme (voir notes ci-dessous pour une explication de la distribution uniforme).

On suppose que des nouvelles tâches arrivent d'une façon aléatoire avec un délai inter-arrivée ("inter-arrival time") qui suit une distribution uniforme de 0.2±0.1 heures (pour tous les types de tâches confondus).  50% des tâches qui arrivent sont de type 1, 30% sont de type 2, et 20% sont de type 3. À chaque groupe de machines, les tâches (qui arrivent pour exécuter une étape de travail) sont servies en ordre FIFO. Il y a donc la possibilité qu'une tâche doive attendre (dans une file) avant d'être servi par un groupe de machines pour son étape de travail suivante.

En plus, il y a un aire de stockage associé au groupe de machines numéro 3 qui permet le stockage de 10 composantes intermédiaires. De telles composantes sont produites quand une tâche de type 1 quitte une machine dans le groupe numéro 3. Pour chaque tâche de type 1, deux composantes à stocker sont produites.  Les tâches de types 2 et 3 sont des consommateurs de ces composantes. Avant d'exécuter leur étape de travail sur le groupe de machines numéro 3, chaque tâche de type 2 ou 3 doit obtenir une telle composante, ou attendre si l'aire de stockage est vide.

Tâche: 

Écrivez une programme en Java qui simule l'usine et l'organisation de travail décrites ci-haut.

Pour l'exécution d'une simulation, utilisez l'état du système suivant: Au lieu de commencer par une usine sans aucun tâche active, commencez la simulation par un état où l'usine contient 8 tâches (de types aléatoires) qui attendent leur première étape de travail. Exécutez la simulation pendant 25 périodes de travail de 8 heures chaque (changement d'équipe de travail pour chaque période de travail). On peut supposer qu'il n'y a pas de discontinuités lors des transitions entre périodes de travail.

Faites des simulations pour déterminer les caractéristiques suivantes:

Considérez la longueur des files d'attentes. Quelle(s) groupe(s) de machines semble(nt) être le(s) goulot(s) d'étranglement dans l'usine ? - Si vous pourriez acheter une machine pour l'usine, quelle type de machine achèteriez-vous ? - Ajoutez une machine au groupe critique et refaites la simulation.

À remettre:

  1. Rapport sur la conception du système de simulation, hypothèses et autres considérations, résultats des simulations et analyse des résultats.
  2. Programme de simulation sur papier et sur disquette.

Note:

Une distribution uniforme peut être décrite en indiquant la valeur moyenne A et la déviation maximale B (qui est la moitié de la variation totale de la distribution). La distribution peut donc être décrite par A±B, c'est-à-dire [A-B, A+B). Une valeur aléatoire de la distribution peut être obtenue par la formule A-B+2*B*R, où R est un nombre aléatoire entre 0 et 1. En Java, la classe java.util.Random peut être utilisée pour générer un nombre aléatoire. nextFloat() retourne la prochaine valeur "pseudo-random" de type float générée par le générateur de nombres aléatoires avec distribution uniforme entre 0 et 1.

Le programme exemple suivant produit des nombres aléatoires entre 0.0 (inclusivement) et 1.0 (exclusivement).

import java.util.*;

 

public class Main{

      public static void main(String[] args)

      {

            float num1;

            Random g = new Random(0);

            num1 = g.nextFloat();

            System.out.println("ramdom number = " + num1);

      }

}